package attend.action.attend;

import java.net.UnknownHostException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import attend.UserContainer.User;
import attend.com.CodeMetrix;
import attend.com.Session;
import attend.dao.attend.AttendDao;
import attend.dao.common.CommonDao;

import com.opensymphony.xwork2.ActionContext;

import dao.Paging.PagingDAO;
import exception.BaseException;

/**
 * 근태관리(사원)
 * @author Ynag Chang Hwan
 * @since 2009/01/15
 */
public class AttendAction extends Session {
	
	//session add-on //2009/02/10
	private	Map								session;
	
	private List<String>					listCondition		= null;		//DAO로 넘기는 PARAMETERS
	
	private List<HashMap<String, String>> 	listYear 			= new ArrayList<HashMap<String,String>>();		//조회년도
	private List<HashMap<String, String>> 	listMonth 			= new ArrayList<HashMap<String,String>>();		//조회월
	private List<HashMap<String, String>> 	listGroup 			= new ArrayList<HashMap<String,String>>();		//사용중인 그룹들
	private List<HashMap<String, String>> 	listCheckInType 	= new ArrayList<HashMap<String,String>>();		//출근유형
	private List<HashMap<String, String>> 	listCheckInPLace 	= new ArrayList<HashMap<String,String>>();		//출근지
	private List<HashMap<String, String>> 	listCheckOutType 	= new ArrayList<HashMap<String,String>>();		//퇴근유형
	private List<HashMap<String, String>> 	listCommonCode	 	= new ArrayList<HashMap<String,String>>();		//그룹코드에 따른 공통코드 조회
	private List<HashMap<String, String>>   listReqAttend       = new ArrayList<HashMap<String,String>>();
	private List<HashMap<String, String>>   listAuth            = new ArrayList<HashMap<String,String>>();
	
	private List<HashMap<String, String>> 	list 				= null;		//공통으로 사용할 쿼리 결과
	private AttendAction attendAction;
	
	private SimpleDateFormat				sdf					= null;		//날짜와 시간
	private AttendManagerAction  attendManagerAction;
	private String							yyyymmdd		 	= null;		//출근 기준날짜
	private String                          reqYyyymmdd         = null;     // 요청일자
	private String							yyyy_mm_dd			= null;		//기준일자 구분자 포함
	private String                          reqYmd              = null;     // 요청기준일자
	private String                          reqInOutTp          = null;     // 요청  I,O
	private String                          reqInOutDetail      = null;     // 요청 출퇴유형상세
	private String                          reqDetailNm         = null;     // 요청 출퇴유형상세 네임
	private String							check_in_time	 	= null;		//출근 시간
	private String							check_out_yyymmdd   = null;		//퇴근 일자
	private String							vacation_type		= null;		//휴가유
	private String                          vaca_in_out_tp      = null;     // 1/19 출퇴유형
	private String 							syear;					//해당년도
	private String 							smonth;					//해당월
	private String							group_no;				//그룹코드
	private String							group_nm;				//그룹명
	private int 							emp_no;					//사번
	private String 							emp_nm;					//성명
	private String							user_id;				//아이디
	private String							team_no;				//팀코드
	private String							team_nm;				//팀명
	private String							etc_emp;				//비고(입력자)
	private String							in_detail_nm;			//출근유형 명칭
	private String							out_detail_nm;			//퇴근유형 명칭
	private String							ip;						//출근입력한 PC의 IP
	private String							check_in_place;			//출근지 cd
	private String							check_in_place_nm;		//출근지 cd_nm 
	private String 							check_in_type	=	"";			//출근휴형
	private String 							check_in_type_nm;			//출근상세
	private String 							approv_emp_no;			//확인자 사번
	
	private String 							msg_etc_emp;			//휴가입력팝업시 입력자비고 보여주기위해 생성
	
	private String							msg			=	"";					//js alert() - message
	private String							chk_in_msg;				//출근정보가 있으면 메시지를 남긴다.
	private String							chk_out_msg;			//퇴근정보가 있으면 메시지를 남긴다.
	
	private String 							chk_yyyymmdd;			//휴가입력에서 체크된 기준일들//20090101,20090121,20090122
	private String 							s_chk;					//휴가입력시 체크된 값
	
	private AttendDao 						attendDao   = null;		//근태관리 DAO
	private CommonDao						commonDao	= null;		//공통 DAO
	
	
	/**************************************************************************************/
	//paging
	
	private PagingDAO						pDao;
	private int start_row;		//시작로우
	private int end_row;		//앤드로우
	
	private int					rowCount				=	0;		//조회된 Row Count
	private int 				cur_page 				= 	1;		//Current Page Number

	private HashMap<String, String> empInfo;

	private User user;

	private String vaca_yyyymmdd;	//휴가입력

	private String authConfirm;

	private String changeAttendDo;

	private String req_etc;


	/**************************************************************************************/
	
	public AttendAction() throws BaseException {

	}


	/**
	 * 메인페이지 호출시
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 */
	public String execute() throws BaseException , SQLException {
		/*=======================================================================================*/
		/* login info */
		//세션을 얻는다.
		//session	=	ActionContext.getContext().getSession();
		if (!session.containsKey("user")) {
			return "login";
		}
		//empInfo = (HashMap<String, String>)session.get("empInfo");
		user	=	(User)session.get("user");
		empInfo		=	user.getEmpInfo();
		//사번
		emp_no		=	Integer.valueOf(empInfo.get("emp_no") );
		//성명
		emp_nm		=	empInfo.get("emp_nm");
		//그룹코드
		group_no	=	empInfo.get("group_no");
		//그룹명
		group_nm	=	empInfo.get("group_nm");
		//팀코드
		team_no		=	empInfo.get("team_no");
		//팀명
		team_nm		=	empInfo.get("team_nm");
		/*=======================================================================================*/
		commonDao = new CommonDao();
		//조회년도 <s:select />
		commonDao.retrieveYearList();
		setListYear(commonDao.getList());	//조회연도
		//현재 연도 -<select /> selected=selecte
		//System.out.println("~~~~~~~~~~~~~~~~~~~			" + listYear.get(listYear.size() - 1).get("year"));
		//syear	=	listYear.get(listYear.size() - 1).get("year");
		syear	=	listYear.get(0).get("year");
		commonDao.retrieveMaxYYYYMMDD();
		//		기준날짜-(출근)
		setYyyymmdd(commonDao.getYyyymmdd());		//기준일자 구분자 미포함 
		setYyyy_mm_dd(commonDao.getYyyy_mm_dd());	//기준일자 구분자 포함
		//조회월 <s:select />
		commonDao.retrieveMonthList();
		setListMonth(commonDao.getList());	//조회월
		//System.out.println("~~~~~~~~~~~~~~~~~~~			" + listMonth.get(listMonth.size() - 1).get("month"));
		//핸재 월-<select /> selected=selected
		smonth	=	listMonth.get(listMonth.size() - 1).get("month");
		//smonth	=	listMonth.get(0).get("month");
		
		//AttendDao attendDao	=	new	AttendDao();
		
		//기준일자와 현재날짜를 비교하여 동일한 날짜가 있는지 확인하고 없으면 메시지를 보여주어 등록할수 없게 한다.
		//기준일자 생성이 되지 않았을 경우 경고 메시지를 뿌려준다.
		//msg = attendDao.hasYYYYMMDD();
		
		return "success";
	}
	
	/**
	 * 조회 결과를 ajajx로 메인페이지에 조회 결과를 보여준다.
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 */
	public String ajax_attend_list() throws BaseException , SQLException {
		
		attendDao 		= new AttendDao();
		
		listCondition 	= new ArrayList<String>();				//parameter를 담을 리스트
		
		listCondition.add(0, yyyymmdd);
		listCondition.add(1, String.valueOf(emp_no));
		
		attendDao.existCheckInInfo(listCondition);				//입력된 출근정보 읽어오기
		
		chk_in_msg 		= 		attendDao.getChk_in_msg();		//입력된 출근정보 읽어오기
		
		attendDao.existCheckOutInfo(listCondition); 			//입력된 퇴근정보 읽어오기
		chk_out_msg 	= 		attendDao.getChk_out_msg();		//입력된 퇴 근정보 읽어오기
		
		/**************************************************************************************/
		//연도 , 월을 더하여 한달간의 조회를 하게 한다.
		//기준일자 = between ?	and ?
		String s_date	= syear + smonth+ "01";	//ex)	20090201	-	시작 날짜
		String e_date	= syear + smonth+ "31";	//ex)	20090231	-	마지막 날짜
		/**************************************************************************************/
		
		/**********************************************************************************/
		//paging
		
		attendDao.countAttendByEmpNo(emp_no , s_date , e_date);
		
		//total row count
		rowCount		=			attendDao.getRowCount();
		
		pDao 			= 			new PagingDAO(15 , 10 , rowCount , cur_page);				//페이징 처리 DAO
		
		start_row 		= 			pDao.getWriting_Start();				//시작 페이지 1
	    end_row   		= 			pDao.getWriting_End();				//끝페이지
	    
		/**********************************************************************************/
		
		//출퇴근 메인페이지 결과 조회
		attendDao.retrieveAttendList(getEmp_no() , s_date , e_date , start_row , end_row);
		
		setList(attendDao.getList());
		
		return "success";
	}
	
	
	
	/**
	 * 출근정보 입력 -popup
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 * @throws UnknownHostException 
	 */
	public String open_CheckIn_p() throws BaseException , SQLException {
		
		//최근 기준일자 조회
		commonDao = new CommonDao();
		commonDao.retrieveMaxYYYYMMDD();
		
		//기준날짜-(출근)
		setYyyymmdd(commonDao.getYyyymmdd());		//기준일자 구분자 미포함 
		setYyyy_mm_dd(commonDao.getYyyy_mm_dd());	//기준일자 구분자 포함
		
		//시간 포맷으로 지정
		setSdf(new SimpleDateFormat("HH:mm"));		//Update시에 replace로 : 제거 HH : 24시간제 hh : 12시간제
		//현재 시간(출근)
		setCheck_in_time(getSdf().format(new Date()));

		attendDao = new AttendDao();

		//출근휴형-selectbox
		attendDao.retrieveCheckInType(emp_no);
		setListCheckInType(attendDao.getList());
		
		//출근지 -selectbox
		attendDao.retrieveCheckInPlace();
		setListCheckInPLace(attendDao.getList());
		
		return "success";
	}
	
	/**
	 * <pre>
	 * 퇴근정보 입력 -popup
	 * </pre>
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 * @throws UnknownHostException 
	 */
	public String open_CheckOut_p() throws BaseException , SQLException {
		
		if (msg.length() > 0) {
			return "success";
		}
		
	  //최근기준일자를 체크하기 위해서 AttendManagerAction으로 넘겨줌.
//		attendManagerAction = new AttendManagerAction();
//		if (this.getYyyymmdd() == null)
//		{
//			Date d = new Date(System.currentTimeMillis());
//			SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd", Locale.KOREA);
//			yyyymmdd = formatter.format(d);
//			
//		}
//		attendManagerAction.setYyyymmdd1(this.getYyyymmdd());
//	System.out.println("Check : " + attendManagerAction.getYyyymmdd1());	
//		최근 기준일자 조회
		commonDao = new CommonDao();
		commonDao.retrieveMaxYYYYMMDD();
		
		//기준날짜-(출근)
		setYyyymmdd(commonDao.getYyyymmdd());		//기준일자 구분자 미포함 
		setYyyy_mm_dd(commonDao.getYyyy_mm_dd());	//기준일자 구분자 포함
		
		//날짜 포맷으로 지정
		setSdf(new SimpleDateFormat("yyyy-MM-dd"));	//YYYY(x)--> yyyy(O)	//Update시에 replace로 - 제거
		
		//퇴근일짜-()
		setCheck_out_yyymmdd(getSdf().format(new Date()));
		
		//시간 포맷으로 지정
		setSdf(new SimpleDateFormat("hh:mm"));		//Update시에 replace로 : 제거
		
//		현재 시간(출근)
		setCheck_in_time(getSdf().format(new Date()));
		
		attendDao = new AttendDao();
		
		//출근의 출근지와 퇴근지랑 동일하게 맞춰주기위함이다.//2009/02/28
		setCheck_in_place( attendDao.retrieveCheckInPlaceBy(yyyymmdd , emp_no) );
		
//		출/퇴근지 -selectbox
		attendDao.retrieveCheckInPlace();
		setListCheckInPLace(attendDao.getList());
		
		attendDao.retrieveCheckOutType( yyyymmdd , emp_no );	//퇴근유형
		setListCheckOutType(attendDao.getList());
		
		return "success";
	}
	
public String change_attend() throws BaseException , SQLException {
//	System.out.println("emp_no---------------"+emp_no);
//	System.out.println("ymd------------------"+reqYmd);
//	System.out.println("inouttp=---------------"+reqInOutTp);
//	System.out.println("inoutdetail--------------"+reqInOutDetail);
//	System.out.println("detailnm-----------------"+reqDetailNm);

	commonDao = new CommonDao();
	commonDao.retrieveGetDate();
	
	setReqYyyymmdd(commonDao.getReqYyyymmdd());
	
	attendDao = new AttendDao();

	attendDao.retrieveIn(reqInOutTp);

	setListReqAttend(attendDao.getList());
	
	attendDao.retrieveAuth(emp_no);
	
	setListAuth(attendDao.getListAuth());
	
		return "success";
	}
	
	/**
	 * <pre>
	 * 출근등록 팝업에서 저장버튼을 눌렀을 때
	 * -DB에 Update함.
	 * </pre>
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 * @throws UnknownHostException 
	 */
	public String update_emp_check_in() throws BaseException , SQLException, UnknownHostException {
		
		yyyymmdd 		= 	yyyymmdd.replace("-", "");		//2009-01-19 ---> 20090119
		check_in_time 	= 	check_in_time.replace(":", "");	//12:19---->1219
		
		attendDao = new AttendDao();
		attendDao.updateEmpAttendCheckIn(yyyymmdd , check_in_time , ip , emp_no , etc_emp , check_in_place , check_in_type );
		
		setMsg(attendDao.getMsg());
		
		return "success";
	}

	/**
	 * <pre>
	 * 퇴근등록 팝업에서 저장버튼을 눌렀을 때
	 * -DB에 Update함.
	 * </pre>
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 * @throws UnknownHostException 
	 */
	public String update_emp_check_out() throws BaseException , SQLException, UnknownHostException {
		
		yyyymmdd 		= 	yyyymmdd.replace("-", "");		//2009-01-19 ---> 20090119
		check_in_time 	= 	check_in_time.replace(":", "");	//12:19---->1219
		
		attendDao = new AttendDao();
		attendDao.updateEmpAttendCheckOut(yyyymmdd , check_in_time , ip , emp_no , etc_emp , check_in_place , check_in_type);
		
		setMsg(attendDao.getMsg());
		
		return "success";
	}
	
	/**
	 * 휴가입력 pop_up 창을 띄움.
	 * @return
	 * @throws SQLException 
	 * @throws BaseException 
	 * @throws BaseException
	 * @throws SQLException
	 */
//	public String open_vacation_p() throws BaseException, SQLException {
//	
//		attendDao 							= new AttendDao();
//		
//		listCondition 						= new ArrayList<String>();
//		
//		String group_cd 					= "102";	//휴가 --102//출근--100//퇴근--101//
//		
//		
//		//세션을 얻는다.
//		session	=	ActionContext.getContext().getSession();
//		
//		if (!session.containsKey("user")) {
//			return "login";
//		}
//		
//		
//		user = (User)session.get("user");
//		
//		//empInfo = (HashMap<String, String>)session.get("empInfo");
//		
//		empInfo = user.getEmpInfo();
//		
//		setEmp_no(Integer.valueOf(empInfo.get("emp_no")));
//		
//		String yyyymmdd  =  String.valueOf(vaca_yyyymmdd);
//		System.out.println("vaca_yyyymmdd-----"+yyyymmdd);
//		attendDao.existCheckInInfoByVaca(yyyymmdd , emp_no);	//출근입력이 있으면 메시지를 가져온다.
//		
//		msg = attendDao.getMsg();					//메시지에 들어있는 내용을 가져온다.
//
//		//System.out.println("vaca_yyyymmdd.length() : "+vaca_yyyymmdd.length());
//		if(vaca_yyyymmdd.length() == 8){
//			attendDao.vacaMsg(vaca_yyyymmdd , emp_no);		//입력자비고 셋팅
//			setMsg_etc_emp(attendDao.getEtc_emp());				//입력자비고 저장하기
//		}else{
//			setMsg_etc_emp("");
//		}
//
//		if(msg.equals(CodeMetrix.OK)){						//메시지 내용의 길이가 0이상이면 error result페이지를 보여준다.
//			
//			commonDao = new CommonDao();
//			
//			commonDao.retireveCommonCode(group_cd);
//			
//			setListCommonCode(commonDao.getList());
//			
//			return "success";
//			
//		} else {
//
//			return "error";
//		}
//	}
	
	
	
//	public String open_vacation_p() throws BaseException, SQLException {
//		
//		attendDao 							= new AttendDao();
//		
//		listCondition 						= new ArrayList<String>();
//		
//		//String group_cd 					= "102";	//휴가 --102//출근--100//퇴근--101//
//		
//		
//		//세션을 얻는다.
//		session	=	ActionContext.getContext().getSession();
//		
//		if (!session.containsKey("user")) {
//			return "login";
//		}
//		
//		
//		user = (User)session.get("user");
//		
//		//empInfo = (HashMap<String, String>)session.get("empInfo");
//		
//		empInfo = user.getEmpInfo();
//		
//		setEmp_no(Integer.valueOf(empInfo.get("emp_no")));
//		
//		String yyyymmdd  =  String.valueOf(vaca_yyyymmdd);
//		System.out.println("vaca_yyyymmdd###-----"+yyyymmdd);
//		attendDao.existCheckInInfoByVaca(yyyymmdd , emp_no);	//출근입력이 있으면 메시지를 가져온다.
//		
//		msg = attendDao.getMsg();					//메시지에 들어있는 내용을 가져온다.
//
//		//System.out.println("vaca_yyyymmdd.length() : "+vaca_yyyymmdd.length());
//		if(vaca_yyyymmdd.length() == 8){
//			attendDao.vacaMsg(vaca_yyyymmdd , emp_no);		//입력자비고 셋팅
//			setMsg_etc_emp(attendDao.getEtc_emp());				//입력자비고 저장하기
//		}else{
//			setMsg_etc_emp("");
//		}
//
//		if(msg.equals(CodeMetrix.OK)){						//메시지 내용의 길이가 0이상이면 error result페이지를 보여준다.
//			
//			commonDao = new CommonDao();
//			
//			commonDao.retireveCommonCode(vaca_yyyymmdd);
//			
//			setListCommonCode(commonDao.getList());
//			
//			return "success";
//			
//		} else {
//
//			return "error";
//		}
//	}
	
	public String open_enter_p() throws BaseException, SQLException {
		
		attendDao 							= new AttendDao();
		
		listCondition 						= new ArrayList<String>();
		
		//String group_cd 					= "102";	//휴가 --102//출근--100//퇴근--101//
		
		
		//세션을 얻는다.
		session	=	ActionContext.getContext().getSession();
		
		if (!session.containsKey("user")) {
			return "login";
		}
		
		
		user = (User)session.get("user");
		
		//empInfo = (HashMap<String, String>)session.get("empInfo");
		
		empInfo = user.getEmpInfo();
		
		setEmp_no(Integer.valueOf(empInfo.get("emp_no")));
		
		//System.out.println("vaca_in_out_tp-----------11>>>>>>"+vaca_in_out_tp); 출퇴값 들어옴.
		//System.out.println("vaca_yyyymmdd33334444-----"+vaca_yyyymmdd);
		
		String vacaInOut = vaca_yyyymmdd.replaceAll("[\\d,]", "");  // 출퇴근유형 추출 (I,O)
		String vacaYyyymmdd = vaca_yyyymmdd.replaceAll(",[OI]","");   // 기준일자 추출
		
		String inOut = null;
		int in=0;
		int out=0;
		//String inOut = vaca_in_out_tp.substring(0,1);
		for(int i=0; i<vacaInOut.length(); i++){
			if(vacaInOut.charAt(i)=='I'){
				in++;
				
			}
			if(vacaInOut.charAt(i)=='O'){
				out++;
			}
		}
		if (in>0 && out==0){  //오전반일휴가 유형
			inOut="I";
			
		}
		if (in==0 && out>0){  //오후반일휴가 유형
			inOut="O";
			
			
		
		}
		if (in>0 && out>0){   //일일휴가변경
			inOut="IO";
		}
		
		
		this.vaca_in_out_tp = inOut;
		this.vaca_yyyymmdd = vacaYyyymmdd;
		
//		System.out.println("vaca_in_out_tp>>"+vaca_in_out_tp);
//	    System.out.println("vaca_in_out_tp>>>"+vaca_in_out_tp);
//		
//	    System.out.println("vacaInOut>>>"+vacaInOut);
//	    System.out.println("vacaYyyymmdd>>>"+vacaYyyymmdd);
		
		attendDao.existCheckInInfoByVaca1( inOut,vacaYyyymmdd , emp_no);	//출근입력이 있으면 메시지를 가져온다.
		
		msg = attendDao.getMsg();					//메시지에 들어있는 내용을 가져온다.
        System.out.println("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS");
		//System.out.println("vaca_yyyymmdd.length() : "+vaca_yyyymmdd.length());
		if(vaca_yyyymmdd.length() == 8){
			attendDao.vacaMsg(vaca_in_out_tp,vaca_yyyymmdd , emp_no);		//입력자비고 셋팅
			setMsg_etc_emp("");
			//setMsg_etc_emp(attendDao.getEtc_emp());				//입력자비고 저장하기
		}else{
			setMsg_etc_emp("");
		}
		   System.out.println("WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW");
		if(msg.equals(CodeMetrix.OK)){						//메시지 내용의 길이가 0이상이면 error result페이지를 보여준다.
			
			commonDao = new CommonDao();
			
		//	commonDao.retireveCommonCodeVaca(vaca_in_out_tp);
			
			setListCommonCode(commonDao.getList());
			
			return "success";
			
		} else {

			return "error";
		}
	}
	
public String open_vacation_p() throws BaseException, SQLException {
		
		attendDao 							= new AttendDao();
		
		listCondition 						= new ArrayList<String>();
		
		//String group_cd 					= "102";	//휴가 --102//출근--100//퇴근--101//
		
		
		//세션을 얻는다.
		session	=	ActionContext.getContext().getSession();
		
		if (!session.containsKey("user")) {
			return "login";
		}
		
		
		user = (User)session.get("user");
		
		//empInfo = (HashMap<String, String>)session.get("empInfo");
		
		empInfo = user.getEmpInfo();
		
		setEmp_no(Integer.valueOf(empInfo.get("emp_no")));
		
		//System.out.println("vaca_in_out_tp-----------11>>>>>>"+vaca_in_out_tp); 출퇴값 들어옴.
		//System.out.println("vaca_yyyymmdd33334444-----"+vaca_yyyymmdd);
		
		String vacaInOut = vaca_yyyymmdd.replaceAll("[\\d,]", "");  // 출퇴근유형 추출 (I,O)
		String vacaYyyymmdd = vaca_yyyymmdd.replaceAll(",[OI]","");   // 기준일자 추출
		
		String inOut = null;
		int in=0;
		int out=0;
		//String inOut = vaca_in_out_tp.substring(0,1);
		for(int i=0; i<vacaInOut.length(); i++){
			if(vacaInOut.charAt(i)=='I'){
				in++;
			}
			if(vacaInOut.charAt(i)=='O'){
				out++;
			}
		}
		if (in>0 && out==0){  //오전반일휴가 유형
			inOut="I";
		}
		if (in==0 && out>0){  //오후반일휴가 유형
			inOut="O";
		}
		if (in>0 && out>0){   //일일휴가변경
			inOut="IO";
		}
		
		
		this.vaca_in_out_tp = inOut;
		this.vaca_yyyymmdd = vacaYyyymmdd;
		
//		System.out.println("vaca_in_out_tp>>"+vaca_in_out_tp);
//	    System.out.println("vaca_in_out_tp>>>"+vaca_in_out_tp);
//		
//	    System.out.println("vacaInOut>>>"+vacaInOut);
//	    System.out.println("vacaYyyymmdd>>>"+vacaYyyymmdd);
		
		attendDao.existCheckInInfoByVaca( inOut,vacaYyyymmdd , emp_no);	//출근입력이 있으면 메시지를 가져온다.
		
		msg = attendDao.getMsg();					//메시지에 들어있는 내용을 가져온다.

		//System.out.println("vaca_yyyymmdd.length() : "+vaca_yyyymmdd.length());
		if(vaca_yyyymmdd.length() == 8){
			attendDao.vacaMsg(vaca_in_out_tp,vaca_yyyymmdd , emp_no);		//입력자비고 셋팅
			setMsg_etc_emp(attendDao.getEtc_emp());				//입력자비고 저장하기
		}else{
			setMsg_etc_emp("");
		}

		if(msg.equals(CodeMetrix.OK)){						//메시지 내용의 길이가 0이상이면 error result페이지를 보여준다.
			
			commonDao = new CommonDao();
			
			commonDao.retireveCommonCodeVaca(vaca_in_out_tp);
			
			setListCommonCode(commonDao.getList());
			
			return "success";
			
		} else {

			return "error";
		}
	}
	/**
	 * <pre>
	 * 휴가 저장 액션
	 * 체크된 갯수만큼 쿼리는 동적으로 
	 * 조건이 생성되게 된다.
	 * </pre>
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 */
public String save_vacation_p() throws BaseException , SQLException {
	
	//조건들을 list에 담아서 넘긴다.
	listCondition = new ArrayList<String>();
	
	int idx = 0;		//index 초기화
	
	listCondition.add(idx++ , getVacation_type() );		//유형상세(휴가)
	listCondition.add(idx++ , getEtc_emp());			//입력자 비고
	listCondition.add(idx++ , getIp());					//입력자 IP
	listCondition.add(idx++ , String.valueOf(emp_no));	//사번을 문자형으로 변형함.
	
	System.out.println("Etc_emp--------"+getEtc_emp());
	attendDao = new AttendDao();
	//SQL parameters send
	attendDao.setListCondition(getListCondition());
	
	attendDao.setYyyymmdd(getYyyymmdd());
	attendDao.setVaca_in_out_tp(getVaca_in_out_tp());
	
	attendDao.updateVacation(listCondition , yyyymmdd , vaca_in_out_tp);
	msg = attendDao.getMsg();
	
	//System.out.println("------------->						" + msg);
	
	return "success";
}
	public String save_enter_p() throws BaseException , SQLException {
		
		//조건들을 list에 담아서 넘긴다.
		listCondition = new ArrayList<String>();
		
		int idx = 0;		//index 초기화
		
		listCondition.add(idx++ , getVacation_type() );		//유형상세(휴가)
		listCondition.add(idx++ , getEtc_emp());			//입력자 비고
		listCondition.add(idx++ , getIp());					//입력자 IP
		listCondition.add(idx++ , String.valueOf(emp_no));	//사번을 문자형으로 변형함.
		
		System.out.println("Etc_emp--------"+getEtc_emp());
		attendDao = new AttendDao();
		//SQL parameters send
		attendDao.setListCondition(getListCondition());
		
		attendDao.setYyyymmdd(getYyyymmdd());
		attendDao.setVaca_in_out_tp(getVaca_in_out_tp());
		
		attendDao.updateenter(listCondition , yyyymmdd , vaca_in_out_tp);
		msg = attendDao.getMsg();
		
		//System.out.println("------------->						" + msg);
		
		return "success";
	}
	public String save_vacation_p2() throws BaseException , SQLException {
		System.out.println("vaca_in_out_tp-------->"+vaca_in_out_tp);
		//조건들을 list에 담아서 넘긴다.
		System.out.println("222222222222222");
		listCondition = new ArrayList<String>();
		
		int idx = 0;		//index 초기화
		
		listCondition.add(idx++ , getVacation_type() );		//유형상세(휴가)
		listCondition.add(idx++ , getEtc_emp());			//입력자 비고
		listCondition.add(idx++ , getIp());					//입력자 IP
		listCondition.add(idx++ , String.valueOf(emp_no));	//사번을 문자형으로 변형함.
		
		attendDao = new AttendDao();
		//SQL parameters send
		attendDao.setListCondition(getListCondition());
		
		attendDao.setYyyymmdd(getYyyymmdd());
		attendDao.setVaca_in_out_tp(getVaca_in_out_tp());
		
		attendDao.updateVacation2(listCondition , yyyymmdd , vaca_in_out_tp);// 일일휴가 업데이트
		msg = attendDao.getMsg();
		
		//System.out.println("------------->						" + msg);
		System.out.println("00000000000000000000000");
		                    
		return "success";
		
		
	}
	
public String updateChange() throws BaseException , SQLException {
	
		
		
//	System.out.println("reqYyyymmdd1111-->    "		+ reqYyyymmdd		);
//	System.out.println("req_etc1111-->    "					+ req_etc					);
//	System.out.println("authConfirm1111-->    "				+ authConfirm				);
//	System.out.println("changeAttendDo1111-->    "				+ changeAttendDo				);
//	System.out.println("reqYmd1111-->    "				+ reqYmd				);
//	System.out.println("reqInOutTp1111-->    "				+ reqInOutTp				);
	
		attendDao = new AttendDao();
		attendDao.updateChange(reqYmd,reqYyyymmdd,req_etc,authConfirm,changeAttendDo,reqInOutTp,emp_no);
		
		setMsg(attendDao.getMsg());
		return "success";
	}
	
	/**
	 * <pre>휴가정보 입력 버튼</pre>
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 */
	public String existCheckInInfoByVaca() throws BaseException , SQLException {
		
		//세션을 얻는다.
		session	=	ActionContext.getContext().getSession();
		
		//if (!session.containsKey("empInfo")) {
		if (!session.containsKey("user")) {
			return "login";
		}
		
		user = (User)session.get("user");
		
		empInfo		=	user.getEmpInfo();
		
		setEmp_no(Integer.valueOf(empInfo.get("emp_no")));	//사번을 가져옴.
		
		attendDao = new AttendDao();
		
		attendDao.existCheckInInfoByVaca(vaca_in_out_tp,s_chk , emp_no );
		
		msg = attendDao.getMsg();
		
		//System.out.println(emp_no);
		
		return "success";
	}
	
	/************************** GETTER / SETTER START *****************************/
	public List<HashMap<String, String>> getList() {
		return list;
	}

	public void setList(List<HashMap<String, String>> list) {
		this.list = list;
	}

	public List<HashMap<String, String>> getListMonth() {
		return listMonth;
	}

	public void setListMonth(List<HashMap<String, String>> listMonth) {
		this.listMonth = listMonth;
	}

	public List<HashMap<String, String>> getListYear() {
		return listYear;
	}

	public void setListYear(List<HashMap<String, String>> listYear) {
		this.listYear = listYear;
	}

	public String getSmonth() {
		return smonth;
	}

	public void setSmonth(String smonth) {
		this.smonth = smonth;
	}

	public String getSyear() {
		return syear;
	}

	public void setSyear(String syear) {
		this.syear = syear;
	}

	public List<HashMap<String, String>> getListGroup() {
		return listGroup;
	}

	public void setListGroup(List<HashMap<String, String>> listGroup) {
		this.listGroup = listGroup;
	}

	public int getEmp_no() {
		return emp_no;
	}

	public void setEmp_no(int emp_no) {
		this.emp_no = emp_no;
	}

	public String getGroup_nm() {
		return group_nm;
	}

	public void setGroup_nm(String group_nm) {
		this.group_nm = group_nm;
	}

	public String getGroup_no() {
		return group_no;
	}

	public void setGroup_no(String group_no) {
		this.group_no = group_no;
	}

	public String getTeam_nm() {
		return team_nm;
	}

	public void setTeam_nm(String team_nm) {
		this.team_nm = team_nm;
	}

	public String getTeam_no() {
		return team_no;
	}

	public void setTeam_no(String team_no) {
		this.team_no = team_no;
	}

	public String getUser_id() {
		return user_id;
	}

	public void setUser_id(String user_id) {
		this.user_id = user_id;
	}

	public String getEmp_nm() {
		return emp_nm;
	}

	public void setEmp_nm(String emp_nm) {
		this.emp_nm = emp_nm;
	}

	public List<HashMap<String, String>> getListCheckInPLace() {
		return listCheckInPLace;
	}

	public void setListCheckInPLace(List<HashMap<String, String>> listCheckInPLace) {
		this.listCheckInPLace = listCheckInPLace;
	}

	public List<HashMap<String, String>> getListCheckInType() {
		return listCheckInType;
	}

	public void setListCheckInType(List<HashMap<String, String>> listCheckInType) {
		this.listCheckInType = listCheckInType;
	}

	public String getEtc_emp() {
		return etc_emp;
	}

	public void setEtc_emp(String etc_emp) {
		this.etc_emp = etc_emp;
	}

	public String getCheck_in_time() {
		return check_in_time;
	}

	public void setCheck_in_time(String check_in_time) {
		this.check_in_time = check_in_time;
	}

	public String getYyyymmdd() {
		return yyyymmdd;
	}
	

	public String getReqYyyymmdd() {
		return reqYyyymmdd;
	}


	public void setReqYyyymmdd(String reqYyyymmdd) {
		this.reqYyyymmdd = reqYyyymmdd;
	}


	public void setYyyymmdd(String yyyymmdd) {
		this.yyyymmdd = yyyymmdd;
	}

	public SimpleDateFormat getSdf() {
		return sdf;
	}

	public void setSdf(SimpleDateFormat sdf) {
		this.sdf = sdf;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public String getCheck_in_place() {
		return check_in_place;
	}

	public void setCheck_in_place(String check_in_place) {
		this.check_in_place = check_in_place;
	}

	public String getCheck_in_place_nm() {
		return check_in_place_nm;
	}

	public void setCheck_in_place_nm(String check_in_place_nm) {
		this.check_in_place_nm = check_in_place_nm;
	}

	public String getCheck_in_type() {
		return check_in_type;
	}

	public void setCheck_in_type(String check_in_type) {
		this.check_in_type = check_in_type;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getCheck_in_type_nm() {
		return check_in_type_nm;
	}

	public void setCheck_in_type_nm(String check_in_type_nm) {
		this.check_in_type_nm = check_in_type_nm;
	}

	public List<HashMap<String, String>> getListCheckOutType() {
		return listCheckOutType;
	}

	public void setListCheckOutType(List<HashMap<String, String>> listCheckOutType) {
		this.listCheckOutType = listCheckOutType;
	}

	public String getCheck_out_yyymmdd() {
		return check_out_yyymmdd;
	}

	public void setCheck_out_yyymmdd(String check_out_yyymmdd) {
		this.check_out_yyymmdd = check_out_yyymmdd;
	}

	public String getYyyy_mm_dd() {
		return yyyy_mm_dd;
	}

	public void setYyyy_mm_dd(String yyyy_mm_dd) {
		this.yyyy_mm_dd = yyyy_mm_dd;
	}

	public String getReqYmd() {
		return reqYmd;
	}


	public String getReqInOutTp() {
		return reqInOutTp;
	}


	public void setReqInOutTp(String reqInOutTp) {
		this.reqInOutTp = reqInOutTp;
	}


	public String getReqInOutDetail() {
		return reqInOutDetail;
	}


	public void setReqInOutDetail(String reqInOutDetail) {
		this.reqInOutDetail = reqInOutDetail;
	}


	public String getReqDetailNm() {
		return reqDetailNm;
	}


	public void setReqDetailNm(String reqDetailNm) {
		this.reqDetailNm = reqDetailNm;
	}


	public void setReqYmd(String reqYmd) {
		this.reqYmd = reqYmd;
	}

	public List<HashMap<String, String>> getListCommonCode() {
		return listCommonCode;
	}

	public void setListCommonCode(List<HashMap<String, String>> listCommonCode) {
		this.listCommonCode = listCommonCode;
	}

	public List<String> getListCondition() {
		return listCondition;
	}

	public void setListCondition(List<String> listCondition) {
		this.listCondition = listCondition;
	}

	public String getVacation_type() {
		return vacation_type;
	}

	public void setVacation_type(String vacation_type) {
		this.vacation_type = vacation_type;
	}

	public String getIn_detail_nm() {
		return in_detail_nm;
	}

	public void setIn_detail_nm(String in_detail_nm) {
		this.in_detail_nm = in_detail_nm;
	}

	public String getOut_detail_nm() {
		return out_detail_nm;
	}

	public void setOut_detail_nm(String out_detail_nm) {
		this.out_detail_nm = out_detail_nm;
	}

	public String getApprov_emp_no() {
		return approv_emp_no;
	}

	public void setApprov_emp_no(String approv_emp_no) {
		this.approv_emp_no = approv_emp_no;
	}

	public String getChk_in_msg() {
		return chk_in_msg;
	}

	public void setChk_in_msg(String chk_in_msg) {
		this.chk_in_msg = chk_in_msg;
	}

	public String getChk_out_msg() {
		return chk_out_msg;
	}

	public void setChk_out_msg(String chk_out_msg) {
		this.chk_out_msg = chk_out_msg;
	}

	public String getChk_yyyymmdd() {
		return chk_yyyymmdd;
	}

	public void setChk_yyyymmdd(String chk_yyyymmdd) {
		this.chk_yyyymmdd = chk_yyyymmdd;
	}

	public String getS_chk() {
		return s_chk;
	}

	public void setS_chk(String s_chk) {
		this.s_chk = s_chk;
	}
	
	public int getStart_row() {
		return start_row;
	}

	public void setStart_row(int start_row) {
		this.start_row = start_row;
	}

	public int getEnd_row() {
		return end_row;
	}

	public void setEnd_row(int end_row) {
		this.end_row = end_row;
	}

	public int getRowCount() {
		return rowCount;
	}

	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}

	public int getCur_page() {
		return cur_page;
	}

	public void setCur_page(int cur_page) {
		this.cur_page = cur_page;
	}

	public PagingDAO getPDao() {
		return pDao;
	}

	public void setPDao(PagingDAO dao) {
		pDao = dao;
	}

	public Map getSession() {
		return session;
	}

	public void setSession(Map session) {
		this.session = session;
	}


	@Override
	public void setUser(User user) {
		this.user = user;
	}

	public User getUser() {
		return user;
	}

	/**
	 * @return the vaca_yyyymmdd
	 */
	public String getVaca_yyyymmdd() {
		return vaca_yyyymmdd;
	}


	/**
	 * @param vaca_yyyymmdd the vaca_yyyymmdd to set
	 */
	public void setVaca_yyyymmdd(String vaca_yyyymmdd) {
		this.vaca_yyyymmdd = vaca_yyyymmdd;
	}


	public String getVaca_in_out_tp() {
		return vaca_in_out_tp;
	}


	public void setVaca_in_out_tp(String vacaInOutTp) {
		vaca_in_out_tp = vacaInOutTp;
	}


	public String getMsg_etc_emp() {
		return msg_etc_emp;
	}


	public void setMsg_etc_emp(String msgEtcEmp) {
		msg_etc_emp = msgEtcEmp;
	}


	public void setListReqAttend(List<HashMap<String, String>> listReqAttend) {
		this.listReqAttend = listReqAttend;
	}


	public List<HashMap<String, String>> getListReqAttend() {
		return listReqAttend;
	}


	public void setListAuth(List<HashMap<String, String>> listAuth) {
		this.listAuth = listAuth;
	}


	public List<HashMap<String, String>> getListAuth() {
		return listAuth;
	}




	public String getAuthConfirm() {
		return authConfirm;
	}


	public void setAuthConfirm(String authConfirm) {
		this.authConfirm = authConfirm;
	}


	public String getChangeAttendDo() {
		return changeAttendDo;
	}


	public void setChangeAttendDo(String changeAttendDo) {
		this.changeAttendDo = changeAttendDo;
	}


	public String getReq_etc() {
		return req_etc;
	}


	public void setReq_etc(String reqEtc) {
		req_etc = reqEtc;
	}


/*	public Object getReq_etc() {
		return req_etc;
	}


	public void setReq_etc(String reqEtc) {
		req_etc = reqEtc;
	}*/


	/************************** GETTER / SETTER E N D ******************************/
}
